/**
 * File Comment: No New Changes Need
 * to be added at the present time.
 */

package edu.gatech.oad.project.operations.users;

import java.io.Serializable;

import edu.gatech.oad.project.operations.data.MedicalHistory;
import edu.gatech.oad.project.operations.scheduling.Schedule;

/**
 * An abstract class for a user that stores
 * their particular medical history, id,
 * and name.
 * 
 * @version 3.0
 * @author Group 17
 */
public abstract class User implements Serializable{
 
    /**
     * Field history of appointments and
  * medical information
     */
    protected MedicalHistory history;
 
    /**
     * Field the scheduler object
     * that stores the appointments
     */
    protected Schedule scheduler;
    
    /**
     * Field id.
     */
    protected int id;
 
    /**
     * Field name.
     */
    protected String name;

    /**
     *  User constructor
     * @param name
     * @param id
     */
    public User(String name, int id){
        this.name = name;
        this.id = id;
    }
 
    /**
     * Method for ID mutator
     * 
     * @param id
     */
    public void setID(int id){
        this.id = id;
    }
 
    /**
     * Method for ID accessor
     * 
     *
     * @return int
     */
    public int getID(){
        return this.id;
    }
 
    /**
     * Method for Name mutator, could possibly change to type Enum
     * 
     * @param name
     */
    public void setName(String name){
        this.name = name;
    }
 
    /**
     * Method for Name accessor
     * 
     *
     * @return String
     */
 
    public String getName(){
        return this.name;
    }

    /**
     * Method makeAppointment.
     * 
     * @param date the calender day desired
     * @param time the time desired
     * @param d the doctor desired
     * @param reason the reason for the appointments
     */
    public abstract void makeAppointment(int date, int time, Doctor d, String reason);

}
